package com.zxl.manager.privacy.utils.database;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * 基础数据库实现类(所有数据库都需要继承该类)
 * 
 * 类名称：BaseDatabaseHelper
 * 类描述：
 * 创建人：makai
 * 修改人：makai
 * 修改时间：2014年10月14日 下午4:06:45
 * 修改备注：
 * @version 1.0.0
 *
 */
public abstract class BaseDatabaseHelper extends SQLiteOpenHelper {
	
	/**
	 * 数据库最小版本号(第一个发布的版本号)
	 */
	public final static int DB_MIN_VERSION = 1;
	
	/**
	 * 是否升级成功
	 */
	protected boolean mIsUpgrade = true;
	
	protected boolean mIsNewDB = false;
	
	public BaseDatabaseHelper(Context context, String name, int version) {
		super(context, name, null, version);
	}
	
	public boolean isNewDB() {
		return mIsNewDB;
	}
	
	/**
	 * 通过SQL查询
	 * rawQuery(这里用一句话描述这个方法的作用)
	 * (这里描述这个方法适用条件 – 可选)
	 * @param sql
	 * @param selectionArgs
	 * @return 
	 *Cursor
	 * @exception 
	 * @since  1.0.0
	 */
	public Cursor rawQuery(String sql, String[] selectionArgs) {
		return DatabaseUtils.rawQuery(this, sql, selectionArgs);
	}

	/**
	 * 执行一段指定的SQL
	 * execSQL(这里用一句话描述这个方法的作用)
	 * (这里描述这个方法适用条件 – 可选)
	 * @param sql 
	 *void
	 * @exception 
	 * @since  1.0.0
	 */
	public boolean execSQL(String... sql) {
		return DatabaseUtils.execSQL(this, sql);
	}

	public boolean execSQL(Object... sql) {
		return DatabaseUtils.execSQL(this, sql);
	}

	/**
	 * 数据升级基础类(所有的数据库升级必须继承该类)
	 * 
	 * 类名称：DatabaseUpgrade
	 * 类描述：数据库升级抽象类
	 * 创建人：makai
	 * 修改人：makai
	 * 修改时间：2014年8月20日 上午11:35:40
	 * 修改备注：
	 * @version 1.0.0
	 *
	 */
	static public abstract class AbstractDatabaseUpgrade {
		
		/**
		 * 升级
		 * @param db
		 */
		public abstract boolean upgradeDb(SQLiteDatabase db, int oldVersion, int newVersion);
		
		/**
		 * 检查指定的表是否存在
		 * @param db
		 * @param tableName	表名
		 * @return
		 */
		public boolean isExistTable(final SQLiteDatabase db, String tableName) {
			return DatabaseUtils.isExistTable(db, tableName);
		}
		
		/**
		 * 检查表中是否存在该字段
		 * @param db
		 * @param tableName		表名
		 * @param columnName	字段名
		 * @return
		 */
		public boolean isExistColumnInTable(SQLiteDatabase db, String tableName, String columnName) {
			return DatabaseUtils.isExistColumnInTable(db, tableName, columnName);
		}
		
		/**
		 * 新添加字段到表中
		 * @param db
		 * @param tableName			修改表名
		 * @param columnName		新增字段名
		 * @param columnType		新增字段类型
		 * @param defaultValue		新增字段默认值。为null，则不提供默认值
		 */
		public void addColumnToTable(SQLiteDatabase db, String tableName, String columnName, String columnType, String defaultValue) {
			DatabaseUtils.addColumnToTable(db, tableName, columnName, columnType, defaultValue);
		}
	}
	
}
